package day06.sparksql

import org.apache.spark.sql.{DataFrame, RelationalGroupedDataset, SparkSession}

object DeaprtmentAvgSalaryAndAgeDemo {
  def main(args: Array[String]): Unit = {
    /*
    需求：统计各部门不同性别的员工的平均薪资和平均年龄。20以上的
    （1）20以上
    （2）根据部门名称和员工性别进行分组统计
    （3）统计每隔部门分性别的平均薪资和平均年龄
     */
    val spark: SparkSession = SparkSession.builder().appName("DeaprtmentAvgSalaryAndAgeDemo").master("local[2]").getOrCreate()
    import spark.implicits._
    import org.apache.spark.sql.functions._   //这个引入是为了使用聚合计算agg(...)方法
    val department: DataFrame = spark.read.json("E://data/department.json")
    val employee: DataFrame = spark.read.json("E://data/employee.json")
    val res: DataFrame = employee.filter("age>20")
      //需要把部门信息join进来，这里三个等号是值一样且类型一样
      .join(department, $"depId" === $"id")
      //根据部门名称和员工性别进行分组统计
      .groupBy(department("name"), employee("gender"))
      //进行聚合计算，注意agg聚合运算需要import org.apache.spark.sql.functions._
      .agg(avg(employee("salary")), avg(employee("age")))
    res.show()
  }
}
